Dynamically creating fitness groups

ABSTRACT

In an approach to locating nearby computing device users to participate in a fitness activity, one or more computer processors receive from a first computing device of a first user, a selection of a fitness activity and a request to locate at least one second computing device associated with at least one second user in a vicinity of the first computing device to join in a fitness activity. The approach includes one or more computer processors determining the at least one second computing device associated with the least one second user is located in the vicinity of the first computing device. Furthermore, the approach includes one or more computer processors determining directions for the first user and the at least one second user to meet.

BACKGROUND OF THE INVENTION

The present invention relates generally to the field of mobile devicelocation monitoring, and more particularly to the use of a server-basedapplication to receive and manage a user request from a mobile computingdevice to determine an appropriate nearby exercise partner engaged in aspecified exercise activity.

A rapid growth of the market for activity tracking devices, fitnessapps, and associated products and services for monitoring and recordingfitness activity is occurring. Activity tracking devices such as FitbitTracker® are wireless-enabled wearable technology devices for tracking auser's activity level. Activity trackers may record various measures offitness activity or exercise such as a number of steps taken by a user,a user heart rate, a user's location, a rate of change or speed of auser's motion, and other user-related exercise metrics. Activitytracking devices may be associated or coupled with mobile apps, othercomputer programs and databases in various computing devices to collect,analyze, and store activity related data.

Numerous activity tracking apps that track and record fitness relatedactivities are available to mobile device users. Activity trackingdevices and activity tracking apps on mobile devices such as smartphones may access fitness services provided by a cloud service or aclient-server computing system. Various fitness services allow users tostore and analyze exercise performance data. Some fitness apps oractivity tracking apps access databases and/or server-based programsthat share exercise workouts, such as running routes with otherindividuals. Additionally, activity tracking apps accessing aserver-based application, may publish individual performance data andpost leader boards for activities such as running, cycling, weightlifting, and the like. Some activity tracking apps may enable users toprovide comments, encouragement, coaching, and in some cases, to issuechallenges to other users.

SUMMARY

Embodiments of the present invention disclose a method, a computerprogram product, and a system to locate computing device users toparticipate in a fitness activity. The method includes one or morecomputer processors receiving from a first computing device of a firstuser, a selection of a fitness activity and a request to locate at leastone second computing device associated with at least one second user ina vicinity of the first computing device to join in a fitness activity.The method includes one or more computer processors determining the atleast one second computing device associated with the least one seconduser is located in the vicinity of the first computing device.Furthermore, the method includes one or more computer processorsdetermining directions for the first user and the at least one seconduser to meet.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 is a functional block diagram illustrating a distributed dataprocessing environment, in accordance with an embodiment of the presentinvention;

FIG. 2 is a flowchart depicting operational steps of a workout groupprogram, on a server computer within the distributed data processingenvironment of FIG. 1, for locating workout partners based onidentifying other interested users of nearby computing devices, inaccordance with an embodiment of the present invention;

FIG. 3 depicts a block diagram of components of the server computerexecuting the workout group program within the distributed dataprocessing environment of FIG. 1, in accordance with an embodiment ofthe present invention;

FIG. 4 depicts a cloud computing environment in accordance with anembodiment of the present invention; and

FIG. 5 depicts abstraction model layers in accordance with an embodimentof the present invention.

DETAILED DESCRIPTION

Embodiments of the present invention recognize that numerous activitytracking devices, fitness apps, and associated fitness services trackuser fitness activities to monitor, analyze, and store individualexercise performance data, and preferred workouts including running andcycling routes. Embodiments of the present invention recognize thatactivity tracking devices and related fitness apps can provide trackingand sharing of individual workout performances with other users.Embodiments of the present invention recognize various individualperformance levels in a group, sharing of workout routines, exercises,or routes for running, hiking, or cycling are shared using variousactivity tracking apps. Embodiments of the present invention recognizethat activity tracking or fitness apps do not provide the ability for auser to request a program or an application to locate other nearbycomputing device users with a similar fitness level and/or engaged in asimilar current exercise routine to join in a workout.

Embodiments of the present invention provide a method to create adynamic or real-time workout group of two or more nearby computingdevice users, engaged in a fitness activity who are interested inexercising together. Embodiments of the present invention enable a userwith a mobile device such as a smartphone with a fitness app to send arequest to a program or an application to locate one or more nearbyworkout partners associated with a computing device or activity trackingdevice to join a workout group to exercise together. Embodiments of thepresent invention provide an ability to identify other nearby computingdevices of users engaged in a similar fitness activity who areinterested in working out with others who have a similar fitness leveland/or in similar workout routine such as a similar running route.Embodiments of the present invention utilize an app on a mobile deviceor smart phone and a program or server-based application where a userrequests the server-based application to identify one or more othernearby computing device users engaged in the same activity to join in afitness activity.

FIG. 1 is a functional block diagram illustrating a distributed dataprocessing environment, generally designated 100, in accordance with oneembodiment of the present invention. The term “distributed” as used inthis specification describes a computer system that includes multiple,physically distinct devices that operate together as a single computersystem. FIG. 1 provides only an illustration of one implementation anddoes not imply any limitations with regard to the environments in whichdifferent embodiments may be implemented. Implementation of embodimentsof the invention may take a variety of forms, and exemplaryimplementation details are discussed subsequently with reference to theFigures. Many modifications to the depicted environment may be made bythose skilled in the art without departing from the scope of theinvention as recited by the claims.

Distributed data processing environment 100 includes activity trackingdevices 120A and 120B, computing device 130A and 130B, and server 150,interconnected over network 110. Network 110 can be, for example, atelecommunications network, a local area network (LAN), a wide areanetwork (WAN), such as the Internet, or a combination of the three, andcan include wired, wireless, or fiber optic connections. Network 110 caninclude one or more wired and/or wireless networks that are capable ofreceiving and transmitting data, voice, and/or video signals, includingmultimedia signals that include voice, data, and video information. Ingeneral, network 110 can be any combination of connections and protocolsthat will support communications between activity tracking devices 120Aand 120B, computing devices 130A and 130B, server 150, and othercomputing devices (not shown) within distributed data processingenvironment 100.

Activity tracking devices 120A and 120B are any known fitness activitytracking devices. Activity tracking devices 120 may include locationsensing devices, heart rate monitors, accelerometers, and other similarcomponents included in an activity tracking device. Activity trackingdevices 120A and 120B may be a wireless-enabled wearable device such asa wristband, a bracelet, a clip-on device such as a device clipped-on toa pocket or a waistband of the user's apparel, or any other device withany method of monitoring the physical activity of a user. In variousembodiments, activity tracking devices 120A and 120B are coupled with acomputing device such as a smart phone. In an embodiment, activitytracking devices 120A and 120B communicate with workout group program151 on server 150 or another computer (not depicted) via network 110. Inone embodiment, activity tracking devices 120A and 120B analyze digitalimages (e.g., digital video, static or dynamic digital heat images) orany other type of recording or method for tracking a user's movements todetermine various measures of the user's activity. Activity trackingdevices 120A and 120B receive and send data such as a user's location tocomputing devices 130A and 130B and server 150 via network 110. Invarious embodiments, each of activity tracking devices 120A and 120B arecoupled with a mobile computing device such as computing devices 130Aand 130B respectively. For example, activity tracking device 120A may beconnected or coupled to computing device 130A. In an embodiment,activity tracking devices 120A and 120B are not present. For example,when computing device 130A and 130B are capable of monitoring a user'sphysical activity or change in location over time. In one embodiment,activity tracking devices 120A and 120B communicate directly withworkout group program 151 to locate other users in the vicinity engagingin a similar fitness activity who are a good match to workout with andare interested in joining another user for the fitness activity.

Computing devices 130A and 130B can each be one or more of a smartphone, a wearable computing device such as a smart watch, a laptopcomputer, a tablet computer, or any programmable electronic devicecapable of communicating with various components and devices withindistributed data processing environment 100, via network 110. Ingeneral, computing devices 130A and 130B each represent any programmableelectronic device or combination of programmable electronic devicescapable of executing machine readable program instructions andcommunicating with server 150, activity tracking devices 120A and 120B,and other computing devices (not shown) within distributed dataprocessing environment 100 via a network, such as network 110. One ormore computing devices such as computing devices 130A and 130B may bepresent in distributed data processing environment 100. As depicted,computing devices 130A and 130B each include an instance of fitness app132 and user interface (UI) 133. In an embodiment, computing devices130A and 130B include more than one fitness app.

In various embodiments, computing devices 130A and 130B are eachrespectively coupled to one of activity tracking devices 120A and 120B.For example, computing device 130A of a user (e.g., a smart phone) iscoupled to activity tracking device 120A that is also coupled or worn bythe user of computing device 130A. In an embodiment, computing devices130A and 130B are not coupled to an associated activity tracking deviceand are capable of monitoring a user's physical activity or changes in auser's location over time. For example, computing device 130A associatedwith or carried by a user may determine and send physical activity datarelated to the user's movements or exercise such as a user's speed(e.g., the rate of change of a user's location), a change in elevation(e.g., running up a hill or jumping), a heart rate, or other exercisefitness data. Computing devices 130A and 130B can monitor exercise orfitness data such as speed, location changes, and the like that can besensed (e.g., by analyzing location data, video, or other data) by acomputing device such as a smart phone, tablet, or desktop computer.

Fitness app 132 resides on computing devices 130A and 130B. Fitness app132 is any known fitness app utilized with mobile computing devices orsmart phones (e.g., computing devices 130A and 130B). Fitness app 132may provide a user of computing devices 130A and 130B the ability tocreate an account for tracking fitness related data associated with theuser of the computing devices such as performances, measuringperformance improvements by activity, course, or over a specified timeperiod, accessing other user created workout routines, running routesand the like. Fitness app 132 may receive user inputs via UI 133, andmay transmit data such as a workout routine detail to storage 155 onserver 150. Fitness app 132 on computing devices 130A and 130B may sendand receive data from computing devices 130A and 130B, activity trackingdevices 120A and 120B, and server 150 via network 110. Fitness app 132may be any available fitness app downloaded on computing devices 130Aand 130B. In various embodiments, fitness app 132 is associated with anactivity tracking device such as activity tracking devices 120A or 120B.In one embodiment, fitness app 132 is associated with more than oneactivity tracking device. One or more different fitness apps may bepresent in computing devices 130A and 130B. In an embodiment, fitnessapp 132 is capable of performing fitness activity tracking.

UI 133 provides an interface for a user of computing device 130A and130B to interact with server 150. In one embodiment, UI 133 may be agraphical user interface (GUI) or a web user interface (WUI) and candisplay text, documents, web browser windows, user options, applicationinterfaces, and instructions for operation, and include the information(such as graphic, text, and sound) that a program presents to a user andthe control sequences the user employs to control the program. Inanother embodiment, UI 133 may also be mobile application software thatprovides an interface between a user of computing device 130A and 130Bor a user of server 150, a user of activity tracking devices 120A and/or120B. UI 133 enables computing device 130A and 130B to displaydirections for users to meet from server 150. UI 133 may also enablecomputing device 130A and 130B to receive a user's request to join aworkout group sent via server 150.

Server 150 can be a standalone computing device, a management server, aweb server, a mobile computing device, or any other electronic device orcomputing system capable of receiving, sending, and processing data. Inother embodiments, server 150 can represent a server computing systemutilizing multiple computers as a server system, such as in a cloudcomputing environment. In another embodiment, server 150 can be a laptopcomputer, a tablet computer, a netbook computer, a personal computer(PC), a desktop computer, a personal digital assistant (PDA), a smartphone, or any programmable electronic device capable of communicatingwith computing devices 130A and 130B, and other computing devices (notshown) within distributed data processing environment 100 via network110. In another embodiment, server 150 represents a computing systemutilizing clustered computers and components (e.g., database servercomputers, application server computers, etc.) that act as a single poolof seamless resources when accessed within distributed data processingenvironment 100. Server 150 includes workout group program 151 andstorage 155. Server 150 may include internal and external hardwarecomponents, as depicted and described in further detail with respect toFIG. 3.

Workout group program 151 determines a location of a requesting userscomputing device (e.g., computing device 130A) and a location of othercomputing devices in the general vicinity (e.g., within a range of oneto ten miles) to determine nearby computing devices. Workout groupprogram 151 determines a location of a computing device (e.g., computingdevice 130A) using any location determination method known to oneskilled in the art. For example, workout group program 151 uses a GPS, aWi-Fi® positioning system (WPS), an indoor positioning system, a hybridpositioning system using a combination of an indoor positioning system,or the like. In another example, workout group program 151 receives fromcomputing device 130A a computing device location for a user determinedbased on a location determination of another device such as a fitnessdevice or activity tracking device 120A or 120B.

Workout group program 151 determines one or more users of nearbycomputing devices, such as computing device 130B, engaged in the sameexercise as a user of computing device 130A. Workout group program 151determines if the users of other nearby computing devices engaged in thesame exercise activity have a similar fitness level and/or engaged in asimilar workout routine are interested in exercising together. Whenworkout group program 151 receives a request to locate one or morecomputing devices of other users engaged in the same or similar exerciseactivity who would like to join a workout group or exercise with anotheruser from fitness app 132, workout group program 151 determines orretrieves a location of the requesting user's computing device (e.g.,computing device 130A). Workout group program 151 searches one or moredatabases on server 150 for computing devices of other users in thevicinity of the requesting user's computing device who have also input arequest, for example, via fitness app 132 to join a workout group. Aworkout group as discussed with reference to embodiments of the presentinvention is more than one individual using a fitness app and/oractivity tracking device (e.g., activity tracking device 120A and/or120B) who exercise or perform a physical activity such as runningtogether in a collaborative group.

Workout group program 151 retrieves, from a database, a fitness datasuch as user performance statistics, a current user workout routine,and/or user preferred workout routines such as a current cycling route.Workout group program 151 compares the retrieved fitness data of theuser of computing device 130A requesting a workout group and the otheridentified users of nearby computing devices to determine if therequesting user and the other identified users have either a similarfitness level or are engaged in a similar workout routine (e.g., runningthe same route). If the retrieved fitness data indicates a good match(e.g., a similar fitness level or a similar current or preferred workoutroutine) then, workout group program 151 determines directions for theinterested users with similar fitness data to meet and exercisetogether.

Workout group program 151 may send and receive data such as a userlocation or a request to join a workout group from computing devices130A and 130B. In some embodiments, workout group program 151 may sendand receive location data or requests to join a workout group to andfrom activity tracking devices 120A and 120B. Workout group program 151on server 150 may send and receive fitness data from activity trackingdevices 120A and 120B. In some embodiments, workout group program 151receives fitness data from computing devices 130A and 130B. In variousembodiments, workout group program 151 retrieves fitness data such asfitness statistics and preferred workouts associated with a user from adatabase, for example in storage 155 on server 150. In variousembodiments, workout group program 151 retrieves user relatedinformation from a user created account (e.g., created via fitness app132) from one or more databases in storage 155. In an embodiment,workout group program 151 and storage 155 are included in a fitnessservice on server 150. Workout group program 151 is depicted anddescribed in further detail with respect to FIG. 2.

Storage 155 resident in server 150 is a repository for fitness relatedinformation provided by activity tracking devices 120A and 120B,computing devices 130A and 130B, in addition to a plurality of othercomputing devices of other users (not depicted). Storage 155 canreceive, retrieve, and store data such as computing device or activitytracking device locations and associated user fitness performance data.Storage 155 may include one or more databases capable of storing,organizing, and accessing data for server 150 and workout group program151. Storage 155 may reside on one or more computing devices or servers(e.g., resides in a cloud-computing environment).

FIG. 2 is a flowchart 200 depicting operational steps of workout groupprogram 151, on server 150 within the distributed data processingenvironment 100 of FIG. 1, for locating workout partners based onidentifying other interested users of nearby computing devices, inaccordance with an embodiment of the present invention.

Workout group program 151 receives a user selection of a fitnessactivity and request to join a workout group (202), for example, fromfitness app 132 on computing device 130A. A fitness activity includesany exercise activity such as running, cycling, weight lifting,kayaking, and the like along with any other physical recreationalactivities such as walking, golf, tennis, bocce, dance, and the like. Inone embodiment, workout group program 151 receives from a user with anaccount, created via a web or mobile app in a fitness service, a requestto locate a nearby workout partner with a similar fitness level and/orengaged in a similar workout routine to join in exercising. A user ofcomputing device 130A may select a line in a menu titled “looking for aworkout group” on UI 133 in fitness app 132. In an embodiment, workoutgroup program 151 receives from a user of fitness app 132 on computingdevice 130A engaging in a fitness activity such as running an indicationof an interest in joining a workout group, for example, by selecting anicon, an option in a menu, or any other user input indicating aninterest in locating a workout group. A workout group may be an existinggroup of two or more users performing a fitness related activity orexercise such as running, biking, kayaking, tennis, weight lifting,yoga, or the like. A workout group may be created for example, usingworkout group program 151, as two or more users engaged in the sameactivity meet to exercise or participate in a fitness activity such aswalking together. In various embodiments, workout group program 151receives a request from an exercising user engaged in a fitness activityto locate one or more other users (e.g., a user of computing device130B) to join in exercising or a fitness activity. In an embodiment,workout group program 151 receives a request from a user planning oninitiating a fitness activity in a relatively short time (e.g., in 5minutes) and would like to locate another user who is just starting oris planning on starting a similar fitness activity or a similar exerciseroutine in a relatively short time. In an embodiment, workout groupprogram 151 receives from computing device 130A, at least, a userselection of a type of activity (e.g., running, biking, tennis, etc.)and a selection of an icon or menu option such as “looking for a workoutgroup.” For example, workout group program 151 receives a user pull-downmenu selection for running as an activity and a selection of an iconindicating an interest in running with other users. In an embodiment,workout group program 151 receives a user selection of specific desiredworkout selection. For example, workout group program 151 receives auser input on UI 133 indicating a specific workout the user wants toengage in such as a specific running route such as Central Park WestTrail, or a specific type of workout such as running hills with multipleelevation changes or skiing moguls. In one embodiment, activity trackingdevices 120A and 120B determine and send to workout group program 151 aspecific type of activity such as running hills or skiing moguls basedon one of a received user input or sensor input (e.g., accelerometerdata, altimeters, etc.).

Workout group program 151 receives a computing device location (204) forcomputing device 130A of the user requesting to joining a workout group.In various embodiments, workout group program 151 receives a userlocation, such as a global positioning system (GPS) coordinate,determined by the user's computing device 130A using one or morelocation determination of techniques known in the art to detect thepresence of a computing device, such as computing device 130A. Forexample, workout group program 151 receives a location of computingdevice 130A determined using any known location determination methodsuch as GPS, Wi-Fi® positioning system (WPS), an indoor positioningsystem, a hybrid positioning system using a combination of an indoorpositioning system, or the like. In another example, workout groupprogram 151 receives from computing device 130A a user locationdetermined based on a location determination of another device such as afitness device such as activity tracking device 120A on the user or asmart watch. In one embodiment, the function and code of workout groupprogram 151 is included in activity tracking device 120A or 120B. In anembodiment, the function and code of workout group program 151 is incomputing devices 130A and 130B.

Workout group program 151 determines whether users of nearby computingdevices are engaged in the same fitness activity (decision 206) as theuser of computing device 130A. In one embodiment, workout group program151 receives from computing device 130A or 130B a user input indicatingan intent to begin a workout in an indicated time (e.g., in ten minutes)and searches for another nearby computing device of a user justbeginning a workout or intending to exercise with the same activity at asimilar time. Workout group program 151 identifies any nearby computingdevices by one or more of several methods using known location sensingdevices and techniques. Workout group program 151 can retrieve alocation for computing device 130A (i.e., received in step 204) asdiscussed above from a database in storage 155. In various embodiments,workout group program 151 is configured with a pre-set range or amaximum distance from the location of computing device 130A, based atleast in part, on a user fitness activity.

A range is a range of distance or a maximum distance, for example, froma location of an object such as from computing device 130A. A computingdevice of a nearby user may be in a pre-determined range determining anarea around computing device 130A or a zone around computing device. Forexample, a zone may be defined as a location within a distance radius ofcomputing device 130A or within a circular area around an identifiedcomputing device of a user interested in joining a workout group. Inanother example, a zone may be defined by GPS coordinates of a perimeterof the zone.

In an embodiment, workout group program 151 includes a list or a tablewith each fitness activity and an associated range or maximum distanceof another computing device to determine if a computing device is nearbycomputing device 130A. For example, the user of computing devices 130Aand 130B are cycling, and a range of two miles is associated in the listor table with cycling to determine if a computing device and anassociated user are in the vicinity of computing device 130A. Workoutgroup program 151 is configured to identify if a cyclist who is a userof computing device 130B is in the vicinity of computing device 130A bydetermining if computing device 130B is at a location within a two mileradius of the location of computing device 130A. In another example,workout group program 151 is configured to locate nearby computingdevices using a range of 500 yards from the user of computing device130A skiing on a ski mountain based, at least in part, on a maximumrange extracted from the list or table in workout group program 151. Inone embodiment, workout group program 151 retrieves the range associatedwith a fitness activity from a list or table stored in a database inanother location such as storage 155. In various embodiments, workoutgroup program 151 is configured with a range or a radius of a set lengthbased on an activity of the user of computing device 130A (e.g., twomiles for cycling) around a user of computing device 130A who isrequesting to locate another user to join a workout group. For example,workout group program 151 determines if another computing device is in alocation within the determined range (e.g., two miles for a user ofcomputing device who is cycling) of computing device 130A.

In another embodiment, workout group program 151 determines a user inthe vicinity of computing device 130A using a time required to meet orjoin up with one or more other users interested in working out in agroup. For example, workout group program 151 may receive a userselection or input of a time such as five minutes to meet another uservia UI 133 in fitness app 132 on computing device 130A. In anembodiment, workout group program 151 uses a received activity selectionin step 202, to determine a range or a zone for locating other nearbyusers engaging the same activity based, on the selected time and thecurrent fitness activity. For example, when a user of computing device130A engaged in cycling selects a time of five minutes, workout groupprogram 151 uses the retrieved activity (cycling) and the selected time(five minutes), and accesses a record or a list of ranges associatedwith an activity in workout group program 151 or retrieved from adatabase in storage 155 to determine a range. For example, workout groupprogram 151 is configured to use a range of 1.5 miles for users cycling.In another example, workout group program 151 retrieves a rangeassociated with an exercise activity from a database or a table with alist of fitness activities, a list of times, and an associated distancefor the user selected activity and the user selected time.

In an embodiment, workout group program 151 determines a range or a zonefor locating other nearby users based, at least in part, on an analysisthe user performance statistics retrieved from a database and a userselected time to meet. For example, workout group program 151 determinesa range for locating nearby computing devices of users performing thesame fitness activity based on an analysis of the extracted fitness dataor workout statistics for the user of computing device 130A retrievedfrom a database for the user selected or current user activity. Forexample, workout group program 151 retrieves from storage 155 an averagecycling speed associated with the user of computing device 130A. Using aretrieved average cycling speed of 20 miles per hour for the user ofcomputing device 130A and a user selection of five minutes to meet wouldresult, for example, in a range of 1.7 miles to identify other computingdevices of users who may be met in five minutes or less. The computingdevices within two miles of computing device 130A may be considerednearby computing devices that are in the vicinity of computing device130A in this example.

In one embodiment, workout group program 151 determines one or morecomputing devices in the vicinity of a user interested in joining aworkout group based, at least in part, on one or more user selectedlocations. For example, workout group program 151 receives a userselection of an address for two parks with tennis courts and has aconfigured pre-set distance of three hundred yards as a range for tennis(the selected fitness activity). Based on the two received addressesand/or associated GPS locations and the range of three hundred yards forlocating computing devices of other users engaging in tennis, workoutgroup program 151 locates three user of computing devices engaging intennis with a location or locations within the range of the first parkand no users of computing devices engaging in tennis in the range of thesecond park. In this example, workout group program 151 identifies threecomputing devices of user engaged in tennis at the first location.

In various embodiments, workout group program 151 retrieves the userselection of a fitness activity the user of computing device 130A isengaged in (e.g., the user's current fitness activity provided in step202). For example, workout group program 151 may retrieve the user'scurrent fitness activity from a database in storage 155 or from aregister or temporary storage location within workout group program 151.In an embodiment, workout group program 151 sends a request to fitnessapp 132 in nearby computing devices in the general area (e.g., a town ora twenty mile radius of computing device 130A) to identify if the usersof the computing devices indicated the same current fitness activity(e.g., running) as the user of computing device 130A. In one embodiment,workout group program 151 polls a database in storage 155, to retrieve arecord containing user fitness activity and associated computing devicelocations for the users to determine other users engaged in the samefitness activity and the location associated with the users engaged inthe same fitness activity. In another example, workout group program 151queries server 150 in a cloud-service hosting one or more databases instorage 155 containing user provided current fitness activity (e.g.,running) used to determine when users of other computing devices (e.g.,computing device 130B) are engaging in the same fitness activity (e.g.,running) as the user of computing device 130A.

When workout group program 151 does not determine that any of the usersof nearby computing devices are engaged in the same fitness activity (nobranch decision 206) then, workout group program 151 continues tomonitor for other computing devices (210). Workout group program 151continues to try to locate other computing devices in the identifiedzone (e.g., located within a determined distance or radius from therequesting user's computing device) to determine a user performing thesame fitness activity.

Responsive to determining that the users of nearby computing devices areengaged in the same fitness activity (yes branch of decision 206),workout group program 151 determines whether the identified users arelooking for a workout group (decision 208). Using one or more methods,workout group program 151 determines if any user of the one or moreidentified nearby computing devices engaging in the same activity as theuser of computing device 130A, determined in step 206, has indicated aninterest in joining a workout group. For example, in one method, workoutgroup program 151 queries a database in storage 155 to determine if theone or more identified users in the vicinity of computing device 130Aindicated an interest in joining a workout group. As discussed earlierin step 202, a user selection of a menu item or an icon representing auser's interest in locating other users to working out or run with maybe stored in a database in storage 155. Workout group program 151queries a database to determine if the identified users have selected tojoin a workout group. For example, workout group program 151 may send alist of users meeting previously discussed requirements to join aworkout group (i.e., engaged in the same activity as the user ofcomputing device 130A) to database in storage 155 in a query requestingidentification of the users from the list who have indicated an interestin joining a workout group. Workout group program 151 may include theuser of computing device 130B in a query to determine if the user ofcomputing device 130B has selected to join a workout group, responsiveto an affirmative or positive response to the query indicating the userdid select to join a workout group, workout group program 151 moves tothe next step or step 216. In embodiments, workout group program 151queries fitness app 132 on each of the identified users computingdevices that meet previous requirements to determine if a selection tojoin a workout group has been made.

Responsive to receiving a reply to the query indicating none of one ormore users of the identified nearby computing devices is interested injoining a workout group (no branch decision 208), workout group program151 continues to monitor the area for other nearby computing devices ofusers looking for a workout group (210). Workout group program 151continues to monitor the zone or area determined previously by a rangein step 206 to identify nearby computing devices of users engaged in thesame fitness activity. Workout group program 151 returns to step 206 toidentify nearby computing devices engaged in the same fitness activityas the user of computing device 130A.

Responsive to receiving a reply to the query indicating at least one ofthe identified users is interested in joining a workout group (yesbranch decision 208), workout group program 151 retrieves the identifiedusers' fitness data (212), for example, from a database in storage 155on server 150. The retrieved fitness data may include fitnessperformance statistics associated with a user and/or exercisepreferences of a user. Fitness performance statistics may include butare not limited to an average workout time, an average workoutperformance, a highest achieved level for a specific fitness target oractivity, and workout performance goals. Exercise preferences mayinclude but are not limited to a preferred workout routine, a preferredworkout route, a preferred workout location, a preferred workout time ofday, and a preferred type of training regime. For example, workout groupprogram 151 retrieves fitness data associated with running for each ofthe identified users interested in joining a workout group including anaverage training speed, an average run distance, a maximum trainingdistance, a preferred time of day to run, a preferred running route, apreferred training regimen (e.g., hills, interval runs, speed workout,easy run, etc.), and other similar running statistics for each of theusers.

Workout group program 151 compares the retrieved fitness data todetermine whether the identified users have a similar fitness level(decision 214). Workout group program 151 compares the fitness data ofthe identified users of nearby computing devices to the fitness data forthe same activity as the user of computing device 130A to see if theyhave a similar fitness level and therefore, would be a good match toform a workout group or to join an existing workout group. In anembodiment, workout group program 151 is configured to use apre-determined set of fitness data to be compared. For example, workoutgroup program 151 retrieves from a database fitness data for an averageworkout, an average length of a workout, and a preferred time of day toworkout. In another example, the user of computing device 130A isplaying golf, workout group program 151 may be configured to retrieveand compare the identified users handicap to the user of computingdevice 130A's handicap for a golf course to determine if the players areat a similar performance level to join up and play a round of golf. Ifthe handicap of the identified user is within 10% of the handicap of theuser of computing device 130A, then workout group program 151 determinesthat the identified user has a similar skill level (e.g., would be agood match to play a round of golf with the user of computing device130A).

In another embodiment, workout group program 151 is configured to allowthe user of computing device 130A to select one or more elements of thefitness data to use in determining if the identified users and the userof computing device 130A have a similar fitness level and are a goodmatch to join a workout group. For example, a runner who is a user ofcomputing device 130A interested in joining a workout group selects anaverage distance of ten miles for a run and an average runtime of eightyminutes for a ten mile run. Workout group program 151 may be configuredto determine that an identified user is a good match to run with theuser of computing device 130A when the average time for a ten mile runis within 5% of the fitness data of computing device 130A.

In another embodiment, workout group program 151 determines that anidentified user is a good match to join a workout group with the user ofcomputing device 130A when at least one half of the identified user'sfitness statistics are within 15% of the fitness statistics of the userof computing device 130A.

In various embodiments, workout group program 151 determines users havea similar fitness level or are a good match to exercise together whenthe users are engaged in a similar current exercise routine (e.g., legworkout) or a similar current route for a fitness activity (e.g., thesame running trail or long range archery target practice). Workout groupprogram 151 retrieves, for example from storage 155, details on acurrent fitness activity such as a current exercise routine for therequesting user of computing device 130A and the user of computingdevice 130B in the vicinity of computing device 130A. Workout groupprogram 151 compares the current exercise routines and/or currentfitness activity routes to determine if the current exercise routines orcurrent running routes are similar and provide a good match for theassociated users to exercise together.

In an embodiment, workout group program 151 tracks the time a user hasbeen engaged in an exercise activity to determine whether the user is agood match for working out with the user of computing device 130Arequesting to join a workout group. For example, workout group program151 tracks the time elapsed since a user selection of an icon such as“beginning to exercise” in fitness app 132 from computing devices 130Aand 130B. Workout group program 151 determines whether both users ofcomputing devices 130A and 130B have a similar amount of time remainingfor the selected exercise activity (e.g., based on an analysis ofretrieved fitness data such as a selected running route or weightlifting routine). Based, at least in part, on a determination of asimilar amount of exercise time remaining, workout group program 151determines that the users of computing devices 130A and 130B are a goodmatch to workout or exercise together.

Responsive to determining that the identified user does not provide agood workout match (no branch of decision 214) then, workout groupprogram 151 continues to monitor for other computing devices (210).Workout group program 151 monitors an area in the vicinity to computingdevice 130A to identify nearby computing devices of users engaged in afitness activity as previously discussed in step decision 206.

Responsive to determining the identified user is a good workout match(yes branch decision 214), then, workout group program 151 determineswhether an identified user, for example the user of computing device130B, is interested in joining (decision 215) the requesting user ofcomputing device 130A in a workout group. In various embodiments,workout group program 151 sends a message to the computing devices ofeach of the identified users meeting the criteria discussed in steps202-214 to determine if the identified users would like to join aworkout group. For example, workout group program 151 sends a message tothe user of computing device 130B such as a short messaging service(SMS), an e-mail, a text message, or any other known type of message torequest if the user of computing device 130B is interested in joining aworkout group, including a message via a social networking applicationor within a fitness application, such as fitness app 132. Responsive tonot receiving at least one positive reply (e.g., receiving only one ormore negative replies or non-responses) indicating that the identifiedusers of computing devices receiving messages are not interested injoining a workout group (no branch of decision 215) then, workout groupprogram 151 proceeds to step 210 to continue to monitor for othercomputing devices and continues on to step decision 206 as required toidentify nearby computing devices of other users engaged in the samefitness activity as the user of computing device 130A.

Responsive to receiving a positive response or reply from the user ofcomputing device 130B receiving the message indicating the nearby user'sinterest in joining a workout group (yes branch of decision 215) then,workout group program 151 determines directions for the identified userand the requesting user to meet (step 216). For example, when workoutgroup program 151 receives a positive response to the message, e-mail,or text from computing device 130B, workout group program 151 may querya database in storage 155 to retrieve a location for computing device130B. In an embodiment, workout group program 151 may query each ofcomputing devices 130A and 130B to receive a current location forcomputing devices 130A and 130B. In an embodiment, based on the locationof the requesting user (e.g., the user of computing device 130A) andlocation of a user of computing device 130B using known mappingtechniques, mapping programs or apps, workout group program 151determines directions for the user of computing device 130A and the userof computing device 130B to meet. For example, when two cyclists aredetermined to be have a similar fitness level or cycle at a similaraverage speed for a workout, then workout group program 151 sendsdirection to meet to the users to meet to create a workout group (218).Workout group program 151 sends a message to the user of computingdevice 130A to slow down to 15 kilometer/hour for three minutes to joinLiam, the user of computing device 130B. The determination of directionsfor each of the identified user of computing devices meeting the abovecriteria may be determined sequentially or may be determinedsimultaneously depending, for example, on available computing resources.

In one embodiment, workout group program 151 sends a location ofcomputing device 130A to computing device 130B and a location ofcomputing device 130B to computing device 130A so that computing devices130A and 130B provide directions for the respective users to meet. Forexample, workout group program 151 sends location data for computingdevice 130B such as a GPS co-ordinate or a latitude and longitude tocomputing device 130A. The user of computing device 130A inputs the GPSco-ordinate in a known mapping app and receives directions to meet theuser of computing device 130B via UI 133. In one embodiment, workoutgroup program 151 resident on a computing device (e.g., computing device130A) uses the retrieved location for another computing device (e.g.,computing device 130B) and accesses known mapping apps to providedirections for the user of computing device 130A to meet the user ofcomputing device 130B. Workout group program 151 may retrieve a locationof computing device 130B from storage 155 and, using a known mappingapps, provides to a user of computing device 130A directions to meet theuser of computing device 130B displayed on UI133.

In one embodiment, in the event of no response from the user ofcomputing device 130B, workout group program sends directions to meetwith the user of computing device 130A to the user of computing device130B and directions to meet the user of computing device 130B to theuser of computing device 130A. For example, the user of computing device130A, Jane, hitting at a warm-up wall in a tennis center indicates, inworkout group program 151, an interest in meeting another player for aset of tennis. Sue, a user of computing device 130B, interested inanother set of tennis, did not respond to a message from workout groupprogram 151, is finishing up a game with another player on court 6 andreceives a message from workout group program 151 with directions tomeet Jane in ten minutes on court 3. Jane receives directions fromworkout group program 151 to meet Sue on court 3 in ten minutes to playa set of tennis. In an embodiment, the users receiving directions send aconfirmation to workout group program 151 of an intent to meet at thelocation as directed. In response to receiving a confirmation from auser to join the workout group, workout group program 151 sends a noticeto the other user communicating a specific user's intent to join theworkout group. In the case where a user has not confirmed joining aworkout group in a pre-determined time, for example, 5 minutes beforethe meeting, workout group program 151 is configured to send anothermessage to the non-responsive user requesting a confirmation.

In the event of a fitness activity such as tennis with a limitation of anumber of participants or a user input limitation such as one otherrunner to run with input by user to workout group program 151 whenmultiple compatible users of computing devices are identified in thevicinity of the user of computing device 130A, workout group program 151sends a request to each of the compatible users of computing devices inthe vicinity of computing device 130A and upon receiving a firstresponse from a user or the first number affirmative responsescorresponding the limitation input by the user or inherent to theactivity (e.g., configured in workout group program 151), then workoutgroup program 151 determines directions for the first affirmativeresponding users (e.g., within the limited number of users for theactivity) to meet with the user of computing device 130A. Upon receivingadditional affirmative responses from more users than the number ofusers specified or limited by the requesting user or the selectedfitness activity, workout group program 151 sends a notification to eachof additional users indicating an interest in exercising with the userof computing device 130A that the user of computing device 130A isengaged with other users and may join you next time.

The method described above for the operational steps of workout groupprogram 151 (e.g., steps 204-218) can be repeated, as necessary or asdesired, to find additional users with similar fitness levels who wouldlike to join a workout group. In one embodiment, a user of computingdevice 130A turns off or disables the “looking for a workout groupselection” when a group of a desired size is formed. For example, aweightlifter desires to locate a single workout partner for his or herworkout group. In another example, in cycling, the addition of multipleadditional riders of similar cycling speeds or fitness levels may resultin a peloton. A peloton is a large group of cyclist benefiting fromdrafting to conserve energy while riding or racing that benefits fromthe continued addition of additional cyclists interested in workingtogether in a collaborative cycling group.

In various embodiments, workout group program 151 is configured toperform the yes branches of decision steps 206, 208, 214, and 215 inanother order. While step 212 is performed at some time before step 214,the yes branches of decision steps 206, 208, 214, and 215 may beperformed in another order. For example, performing decision step 215after step 204, followed by step decision step 208, then, decision step206, and finally decision step 214 preceded by step 212 would result inthe same identified user and associated user computing devices forworkout group program 151 to determine and to send directions to meet ina workout group. Workout group program 151 is configured to meetidentified criteria before determining directions for one or morematched workout users of nearby computing devices to meet. In variousembodiments, workout group program 151 is configured to include thefollowing criteria as identified criteria: the nearby computing devicesare computing devices of users engaged in the same exercise activity,the users of the nearby computing devices engaged in the same exerciseactivity are looking for a workout group to join in the same exerciseactivity, and the users of nearby computing devices engaged in the sameactivity are a good match for working out together. Workout groupprogram 151 determines, in any order, that one or more users of nearbycomputing devices engaged in the same activity meet the identifiedcriteria. In various embodiments, the identified criteria determined inorder for workout group program 151 to provide directions to one or moreusers of nearby computing devices who meet the identified criteriainclude the yes branches of decision steps 206, 208, 214, and 215 inFIG. 2. For example, workout group program 151 determines in any orderthat each of decision steps 206, 208, 214, and 215 are met (e.g., yesbranches of decision branches of decision steps 206, 208, 214, and 215are followed or in effect).

FIG. 3 depicts a block diagram 300 of components of server 150 withindistributed data processing environment 100 of FIG. 1, in accordancewith an embodiment of the present invention. It should be appreciatedthat FIG. 3 provides only an illustration of one implementation and doesnot imply any limitations with regard to the environments in whichdifferent embodiments can be implemented. Many modifications to thedepicted environment can be made.

Server 150 can include processor(s) 304, cache 314, memory 306,persistent storage 308, communications unit 310, input/output (I/O)interface(s) 312 and communications fabric 302. Communications fabric302 provides communications between cache 314, memory 306, persistentstorage 308, communications unit 310, and input/output (I/O)interface(s) 312. Communications fabric 302 can be implemented with anyarchitecture designed for passing data and/or control informationbetween processors (such as microprocessors, communications and networkprocessors, etc.), system memory, peripheral devices, and any otherhardware components within a system. For example, communications fabric302 can be implemented with one or more buses.

Memory 306 and persistent storage 308 are computer readable storagemedia. In an embodiment, memory 306 includes random access memory (RAM).In general, memory 306 can include any suitable volatile or non-volatilecomputer readable storage media. Cache 314 is a fast memory thatenhances the performance of processor(s) 304 by holding recentlyaccessed data, and data near recently accessed data, from memory 306.

Program instructions and data used to practice embodiments of thepresent invention, e.g., workout group program 151 are stored inpersistent storage 308 for execution and/or access by one or more of therespective processor(s) 304 of server 150 via cache 314. In thisembodiment, persistent storage 308 includes a magnetic hard disk drive.Alternatively, or in addition to a magnetic hard disk drive, persistentstorage 308 can include a solid-state hard drive, a semiconductorstorage device, a read-only memory (ROM), an erasable programmableread-only memory (EPROM), a flash memory, or any other computer readablestorage media that is capable of storing program instructions or digitalinformation.

The media used by persistent storage 308 may also be removable. Forexample, a removable hard drive may be used for persistent storage 308.Other examples include optical and magnetic disks, thumb drives, andsmart cards that are inserted into a drive for transfer onto anothercomputer readable storage medium that is also part of persistent storage308.

Communications unit 310, in these examples, provides for communicationswith other data processing systems or devices depicted in FIG. 1,including resources of computing devices 130A and 130B. In theseexamples, communications unit 310 includes one or more network interfacecards. Communications unit 310 may provide communications through theuse of either or both physical and wireless communications links.Workout group program 151 may be downloaded to persistent storage 308 ofserver 150 through communications unit 310.

I/O interface(s) 312 allows for input and output of data with otherdevices that may be connected to server 150. For example, I/Ointerface(s) 312 may provide a connection to external device(s) 316 suchas a keyboard, a keypad, a touch screen, a microphone, a digital camera,and/or some other suitable input device. External device(s) 316 can alsoinclude portable computer readable storage media such as, for example,thumb drives, portable optical or magnetic disks, and memory cards.Software and data used to practice embodiments of the present invention,e.g., workout group program 151 and storage 155 on server 150, can bestored on such portable computer readable storage media and can beloaded onto persistent storage 308 via I/O interface(s) 312. I/Ointerface(s) 312 also connect to a display 318.

Display 318 provides a mechanism to display data to a user and may be,for example, a computer monitor. Display 318 can also function as atouchscreen, such as a display of a tablet computer.

It is to be understood that although this disclosure includes a detaileddescription on cloud computing, implementation of the teachings recitedherein are not limited to a cloud computing environment. Rather,embodiments of the present invention are capable of being implemented inconjunction with any other type of computing environment now known orlater developed.

Cloud computing is a model of service delivery for enabling convenient,on-demand network access to a shared pool of configurable computingresources (e.g., networks, network bandwidth, servers, processing,memory, storage, applications, virtual machines, and services) that canbe rapidly provisioned and released with minimal management effort orinteraction with a provider of the service. This cloud model may includeat least five characteristics, at least three service models, and atleast four deployment models.

Characteristics are as follows:

On-demand self-service: a cloud consumer can unilaterally provisioncomputing capabilities, such as server time and network storage, asneeded automatically without requiring human interaction with theservice's provider.

Broad network access: capabilities are available over a network andaccessed through standard mechanisms that promote use by heterogeneousthin or thick client platforms (e.g., mobile phones, laptops, and PDAs).

Resource pooling: the provider's computing resources are pooled to servemultiple consumers using a multi-tenant model, with different physicaland virtual resources dynamically assigned and reassigned according todemand. There is a sense of location independence in that the consumergenerally has no control or knowledge over the exact location of theprovided resources but may be able to specify location at a higher levelof abstraction (e.g., country, state, or datacenter).

Rapid elasticity: capabilities can be rapidly and elasticallyprovisioned, in some cases automatically, to quickly scale out andrapidly released to quickly scale in. To the consumer, the capabilitiesavailable for provisioning often appear to be unlimited and can bepurchased in any quantity at any time.

Measured service: cloud systems automatically control and optimizeresource use by leveraging a metering capability at some level ofabstraction appropriate to the type of service (e.g., storage,processing, bandwidth, and active user accounts). Resource usage can bemonitored, controlled, and reported, providing transparency for both theprovider and consumer of the utilized service.

Service Models are as follows:

Software as a Service (SaaS): the capability provided to the consumer isto use the provider's applications running on a cloud infrastructure.The applications are accessible from various client devices through athin client interface such as a web browser (e.g., web-based e-mail).The consumer does not manage or control the underlying cloudinfrastructure including network, servers, operating systems, storage,or even individual application capabilities, with the possible exceptionof limited user-specific application configuration settings.

Platform as a Service (PaaS): the capability provided to the consumer isto deploy onto the cloud infrastructure consumer-created or acquiredapplications created using programming languages and tools supported bythe provider. The consumer does not manage or control the underlyingcloud infrastructure including networks, servers, operating systems, orstorage, but has control over the deployed applications and possiblyapplication hosting environment configurations.

Infrastructure as a Service (IaaS): the capability provided to theconsumer is to provision processing, storage, networks, and otherfundamental computing resources where the consumer is able to deploy andrun arbitrary software, which can include operating systems andapplications. The consumer does not manage or control the underlyingcloud infrastructure but has control over operating systems, storage,deployed applications, and possibly limited control of select networkingcomponents (e.g., host firewalls).

Deployment Models are as follows:

Private cloud: the cloud infrastructure is operated solely for anorganization. It may be managed by the organization or a third party andmay exist on-premises or off-premises.

Community cloud: the cloud infrastructure is shared by severalorganizations and supports a specific community that has shared concerns(e.g., mission, security requirements, policy, and complianceconsiderations). It may be managed by the organizations or a third partyand may exist on-premises or off-premises.

Public cloud: the cloud infrastructure is made available to the generalpublic or a large industry group and is owned by an organization sellingcloud services.

Hybrid cloud: the cloud infrastructure is a composition of two or moreclouds (private, community, or public) that remain unique entities butare bound together by standardized or proprietary technology thatenables data and application portability (e.g., cloud bursting forload-balancing between clouds).

A cloud computing environment is service oriented with a focus onstatelessness, low coupling, modularity, and semantic interoperability.At the heart of cloud computing is an infrastructure that includes anetwork of interconnected nodes.

Referring now to FIG. 4, illustrative cloud computing environment 50 isdepicted. As shown, cloud computing environment 50 includes one or morecloud computing nodes 10 with which local computing devices used bycloud consumers, such as, for example, personal digital assistant (PDA)or cellular telephone 54A, desktop computer 54B, laptop computer 54C,and/or automobile computer system 54N may communicate. Cloud computingnodes 10 may communicate with one another. They may be grouped (notshown) physically or virtually, in one or more networks, such asPrivate, Community, Public, or Hybrid clouds as described hereinabove,or a combination thereof. This allows cloud computing environment 50 tooffer infrastructure, platforms and/or software as services for which acloud consumer does not need to maintain resources on a local computingdevice. It is understood that the types of computing devices 54A-N shownin FIG. 4 are intended to be illustrative only and that cloud computingnodes 10 and cloud computing environment 50 can communicate with anytype of computerized device over any type of network and/or networkaddressable connection (e.g., using a web browser).

Referring now to FIG. 5, a set of functional abstraction layers providedby cloud computing environment 50 (FIG. 4) is shown. It should beunderstood in advance that the components, layers, and functions shownin FIG. 5 are intended to be illustrative only and embodiments of theinvention are not limited thereto. As depicted, the following layers andcorresponding functions are provided:

Hardware and software layer 60 includes hardware and softwarecomponents. Examples of hardware components include: mainframes 61; RISC(Reduced Instruction Set Computer) architecture based servers 62;servers 63; blade servers 64; storage devices 65; and networks andnetworking components 66. In some embodiments, software componentsinclude network application server software 67 and database software 68.

Virtualization layer 70 provides an abstraction layer from which thefollowing examples of virtual entities may be provided: virtual servers71; virtual storage 72; virtual networks 73, including virtual privatenetworks; virtual applications and operating systems 74; and virtualclients 75.

In one example, management layer 80 may provide the functions describedbelow. Resource provisioning 81 provides dynamic procurement ofcomputing resources and other resources that are utilized to performtasks within the cloud computing environment. Metering and Pricing 82provide cost tracking as resources are utilized within the cloudcomputing environment, and billing or invoicing for consumption of theseresources. In one example, these resources may include applicationsoftware licenses. Security provides identity verification for cloudconsumers and tasks, as well as protection for data and other resources.User portal 83 provides access to the cloud computing environment forconsumers and system administrators. Service level management 84provides cloud computing resource allocation and management such thatrequired service levels are met. Service Level Agreement (SLA) planningand fulfillment 85 provide pre-arrangement for, and procurement of,cloud computing resources for which a future requirement is anticipatedin accordance with an SLA.

Workloads layer 90 provides examples of functionality for which thecloud computing environment may be utilized. Examples of workloads andfunctions which may be provided from this layer include: mapping andnavigation 91; software development and lifecycle management 92; virtualclassroom education delivery 93; data analytics processing 94;transaction processing 95; and workout group program 96.

The programs described herein are identified based upon the applicationfor which they are implemented in a specific embodiment of theinvention. However, it should be appreciated that any particular programnomenclature herein is used merely for convenience, and thus theinvention should not be limited to use solely in any specificapplication identified and/or implied by such nomenclature.

The present invention may be a system, a method, and/or a computerprogram product. The computer program product may include a computerreadable storage medium (or media) having computer readable programinstructions thereon for causing a processor to carry out aspects of thepresent invention.

The computer readable storage medium can be any tangible device that canretain and store instructions for use by an instruction executiondevice. The computer readable storage medium may be, for example, but isnot limited to, an electronic storage device, a magnetic storage device,an optical storage device, an electromagnetic storage device, asemiconductor storage device, or any suitable combination of theforegoing. A non-exhaustive list of more specific examples of thecomputer readable storage medium includes the following: a portablecomputer diskette, a hard disk, a random access memory (RAM), aread-only memory (ROM), an erasable programmable read-only memory (EPROMor Flash memory), a static random access memory (SRAM), a portablecompact disc read-only memory (CD-ROM), a digital versatile disk (DVD),a memory stick, a floppy disk, a mechanically encoded device such aspunch-cards or raised structures in a groove having instructionsrecorded thereon, and any suitable combination of the foregoing. Acomputer readable storage medium, as used herein, is not to be construedas being transitory signals per se, such as radio waves or other freelypropagating electromagnetic waves, electromagnetic waves propagatingthrough a waveguide or other transmission media (e.g., light pulsespassing through a fiber-optic cable), or electrical signals transmittedthrough a wire.

Computer readable program instructions described herein can bedownloaded to respective computing/processing devices from a computerreadable storage medium or to an external computer or external storagedevice via a network, for example, the Internet, a local area network, awide area network and/or a wireless network. The network may comprisecopper transmission cables, optical transmission fibers, wirelesstransmission, routers, firewalls, switches, gateway computers and/oredge servers. A network adapter card or network interface in eachcomputing/processing device receives computer readable programinstructions from the network and forwards the computer readable programinstructions for storage in a computer readable storage medium withinthe respective computing/processing device.

Computer readable program instructions for carrying out operations ofthe present invention may be assembler instructions,instruction-set-architecture (ISA) instructions, machine instructions,machine dependent instructions, microcode, firmware instructions,state-setting data, or either source code or object code written in anycombination of one or more programming languages, including an objectoriented programming language such as Smalltalk, C++ or the like, andconventional procedural programming languages, such as the “C”programming language or similar programming languages. The computerreadable program instructions may execute entirely on the user'scomputer, partly on the user's computer, as a stand-alone softwarepackage, partly on the user's computer and partly on a remote computeror entirely on the remote computer or server. In the latter scenario,the remote computer may be connected to the user's computer through anytype of network, including a local area network (LAN) or a wide areanetwork (WAN), or the connection may be made to an external computer(for example, through the Internet using an Internet Service Provider).In some embodiments, electronic circuitry including, for example,programmable logic circuitry, field-programmable gate arrays (FPGA), orprogrammable logic arrays (PLA) may execute the computer readableprogram instructions by utilizing state information of the computerreadable program instructions to personalize the electronic circuitry,in order to perform aspects of the present invention.

Aspects of the present invention are described herein with reference toflowchart illustrations and/or block diagrams of methods, apparatus(systems), and computer program products according to embodiments of theinvention. It will be understood that each block of the flowchartillustrations and/or block diagrams, and combinations of blocks in theflowchart illustrations and/or block diagrams, can be implemented bycomputer readable program instructions.

These computer readable program instructions may be provided to aprocessor of a general purpose computer, a special purpose computer, orother programmable data processing apparatus to produce a machine, suchthat the instructions, which execute via the processor of the computeror other programmable data processing apparatus, create means forimplementing the functions/acts specified in the flowchart and/or blockdiagram block or blocks. These computer readable program instructionsmay also be stored in a computer readable storage medium that can directa computer, a programmable data processing apparatus, and/or otherdevices to function in a particular manner, such that the computerreadable storage medium having instructions stored therein comprises anarticle of manufacture including instructions which implement aspects ofthe function/act specified in the flowchart and/or block diagram blockor blocks.

The computer readable program instructions may also be loaded onto acomputer, other programmable data processing apparatus, or other deviceto cause a series of operational steps to be performed on the computer,other programmable apparatus or other device to produce a computerimplemented process, such that the instructions which execute on thecomputer, other programmable apparatus, or other device implement thefunctions/acts specified in the flowchart and/or block diagram block orblocks.

The flowchart and block diagrams in the Figures illustrate thearchitecture, functionality, and operation of possible implementationsof systems, methods, and computer program products according to variousembodiments of the present invention. In this regard, each block in theflowchart or block diagrams may represent a module, a segment, or aportion of instructions, which comprises one or more executableinstructions for implementing the specified logical function(s). In somealternative implementations, the functions noted in the blocks may occurout of the order noted in the Figures. For example, two blocks shown insuccession may, in fact, be executed substantially concurrently, or theblocks may sometimes be executed in the reverse order, depending uponthe functionality involved. It will also be noted that each block of theblock diagrams and/or flowchart illustration, and combinations of blocksin the block diagrams and/or flowchart illustration, can be implementedby special purpose hardware-based systems that perform the specifiedfunctions or acts or carry out combinations of special purpose hardwareand computer instructions.

The descriptions of the various embodiments of the present inventionhave been presented for purposes of illustration, but are not intendedto be exhaustive or limited to the embodiments disclosed. Manymodifications and variations will be apparent to those of ordinary skillin the art without departing from the scope and spirit of the invention.The terminology used herein was chosen to best explain the principles ofthe embodiment, the practical application or technical improvement overtechnologies found in the marketplace, or to enable others of ordinaryskill in the art to understand the embodiments disclosed herein.

What is claimed is:
 1. A method to locate computing device users toparticipate in a fitness activity, the method comprising: receiving, byone or more computer processors, from a first computing device of afirst user, a selection of a fitness activity and a request to locate atleast one second computing device associated with at least one seconduser in a vicinity of the first computing device to join in a fitnessactivity; determining, by one or more computer processors, the at leastone second computing device associated with the least one second userlocated in the vicinity of the first computing device; retrieving, byone or more computer processors, the selection of the fitness activity,a location of the first computing device, and a location of the secondcomputing device; retrieving, by one or more computer processors, arange associated with the fitness activity; determining, by one or morecomputer processors, the location of the at least one second computingdevice is in a location within the range of the location of the firstcomputing device; and determining, by one or more computer processors,directions for the first user and the at least one second user to meet.2. The method of claim 1, further comprises sending, by one or morecomputer processors, the directions to meet to the first computingdevice of the first user and to the at least one second computing deviceassociated with the at least one second user.
 3. The method of claim 1,wherein determining the least one second computing device associatedwith the least one second user located in the vicinity of the firstcomputing device further comprises determining, by one or more computerprocessors, the at least one second user is engaged in a similar fitnessactivity as the first user of the first computing device.
 4. The methodof claim 1, wherein determining the least one second computing deviceassociated with the least one second user located in the vicinity of thefirst computing device further comprises determining, by one or morecomputer processors, that the at least one second user is looking forone or more other exercising users to join in exercising.
 5. The methodof claim 1, wherein determining the least one second computing deviceassociated with the least one second user located in the vicinity of thefirst computing device further comprises: retrieving, at least oneexercise preference associated with the fitness activity of the firstuser and the at least one second user; and determining the at least onesecond user is performing a similar exercise routine as the first userbased, in part on, the at least one exercise preference.
 6. The methodof claim 1, further comprising: responsive to determining the at leastone second computing device associated with the least one second user isnot located in the vicinity of the first computing device, monitoring,by one or more computer processors, a plurality of locations in thevicinity of the first computing device to locate one or more additionalcomputing devices associated with an additional user in the vicinity ofthe first computing device.
 7. The method of claim 5, further comprises:responsive to determining the at least one second user is not at asimilar fitness level as the first user based, in part on, the at leastone fitness performance data; and monitoring, by one or more computerprocessors, the plurality of locations in the vicinity of the firstcomputing device to locate one or more additional nearby computingdevices associated with an additional user in the vicinity of the firstcomputing device.
 8. The method of claim 1, wherein determining the atleast one second user is performing the similar current exercise routineor the similar current route as the first user comprises determiningthat the first user and the second user have a similar amount of timeremaining in the similar exercise routing or in the current exerciseroute.
 9. A computer program product comprising: one or more computerreadable storage media and program instructions stored on the one ormore computer readable storage media, the program instructionsexecutable by a processor, the program instructions comprisinginstructions for: receiving from a first computing device of a firstuser, a selection of a fitness activity and a request to locate at leastone second computing device associated with at least one second user ina vicinity of the first computing device to join in a fitness activity;determining the at least one second computing device associated with theleast one second user located in the vicinity of the first computingdevice; retrieving, by one or more computer processors, the selection ofthe fitness activity, a location of the first computing device, and alocation of the second computing device; retrieving, by one or morecomputer processors, a range associated with the fitness activity;determining, by one or more computer processors, the location of the atleast one second computing device is in a location within the range ofthe location of the first computing device; and determining directionsfor the first user and the at least one second user to meet.
 10. Thecomputer program product of claim 9, further comprises sending thedirections to meet to the first computing device of the first user andto the at least one second computing device associated with the at leastone second user.
 11. The computer program product of claim 9, whereindetermining the least one second computing device associated with theleast one second user located in the vicinity of the first computingdevice further comprises determining the at least one second user isengaged in a similar fitness activity as the first user of the firstcomputing device.
 12. The computer program product of claim 9, whereindetermining the least one second computing device associated with theleast one second user located in the vicinity of the first computingdevice further comprises determining the at least one second user islooking for one or more other exercising users to join in exercising.13. The method of claim 1, wherein determining the least one secondcomputing device associated with the least one second user located inthe vicinity of the first computing device further comprises:retrieving, at least one exercise preference associated with the fitnessactivity of the first user and the at least one second user; anddetermining the at least one second user is performing a similarexercise routine as the first user based, in part on, the at least oneexercise preference.
 14. The computer program product of claim 9,further comprising: responsive to determining the at least one secondcomputing device associated with the least one second user is notlocated in the vicinity of the first computing device, monitoring aplurality of locations in the vicinity of the first computing device tolocate one or more additional computing devices associated with anadditional user in the vicinity of the first computing device.
 15. Thecomputer program product of claim 13, further comprises: responsive todetermining the at least one second user is not at a similar fitnesslevel as the first user based, in part on, the at least one fitnessperformance data, monitoring the plurality of locations in the vicinityof the first computing device to locate one or more additional nearbycomputing devices associated with an additional user in the vicinity ofthe first computing device.
 16. A computer system comprising: one ormore computer processors; one or more computer readable storage media;and program instructions stored on the one or more computer readablestorage media for execution by at least one of the one or more computerprocessors, the program instructions comprising instructions for:receiving from a first computing device of a first user, a selection ofa fitness activity and a request to locate at least one second computingdevice associated with at least one second user in a vicinity of thefirst computing device to join in a fitness activity; determining the atleast one second computing device associated with the least one seconduser located in the vicinity of the first computing device; retrieving,by one or more computer processors, the selection of the fitnessactivity, a location of the first computing device, and a location ofthe second computing device; retrieving, by one or more computerprocessors, a range associated with the fitness activity; determining,by one or more computer processors, the location of the at least onesecond computing device is in a location within the range of thelocation of the first computing device; and determining directions forthe first user and the at least one second user to meet.
 17. The methodof claim 1, wherein determining the least one second computing deviceassociated with the least one second user located in the vicinity of thefirst computing device further comprises: retrieving, at least oneexercise preference associated with the fitness activity of the firstuser and the at least one second user; and determining the at least onesecond user is performing a similar exercise routine as the first userbased, in part on, the at least one exercise preference.
 18. Thecomputer system of claim 16, wherein determining the least one secondcomputing device associated with the least one second user located inthe vicinity of the first computing device further comprises determiningthe at least one second user is engaged in a similar fitness activity asthe first user of the first computing device.
 19. The computer system ofclaim 16, further comprising: responsive to determining the at least onesecond computing device associated with the least one second user is notlocated in the vicinity of the first computing device, monitoring aplurality of locations in the vicinity of the first computing device tolocate one or more additional computing devices associated with anadditional user in the vicinity of the first computing device.
 20. Thecomputer system of claim 16, wherein determining the at least one seconduser is performing the similar current exercise routine or the similarcurrent route as the first user comprises determining that the firstuser and the second user have a similar amount of time remaining in thesimilar exercise routing or in the current exercise route.